package com.smsc.headend.task.engine.service.collection;

import com.smsc.headend.module.asset.entity.Meter;
import com.smsc.headend.module.meterscheme.entity.CollMeterTaskPlan;
import com.smsc.headend.module.task.dto.AtomicTask;
import com.smsc.headend.module.task.dto.Task;
import com.smsc.headend.module.task.dto.AtomicTaskState;
import com.smsc.headend.task.engine.exception.UDISTaskExecutorException;

import java.util.Date;
import java.util.Map;
import java.util.Set;

/**
 * 定抄任务相关服务
 */
public interface CollectTaskService {


    String getCollectionTaskLpDataItemId(Task collectionTask);

    /**
     * 删除定抄任务的缓存开始结束时间
     * @param comId
     * @param meterId
     * @param taskNo
     * @param lpDataItemId
     */
    void delMeterCollectTask(Long comId, Long meterId, String taskNo, String lpDataItemId);
    /**
     * 获取Profile的开始结束时间
     * @param taskType
     * @param atomicTask
     * @param parameterMap
     * @param state
     * @return
     */
    Date[] getProfileStartEndDate(Task taskType, AtomicTask atomicTask, Map<String, Object> parameterMap, AtomicTaskState state);

    void saveLpTv(String taskNo, Set<Long> timeValues);

    Set<Long> getAndInvalidLpTv(String taskNo);

    /**
     * 定抄任务中 没有传递profile的开始结束时间时，从Engine模块计算
     *
     * @param task
     * @param paramMap
     * @param meter
     * @param taskType
     * @return
     */
    Map<String, Object> scheduleTaskTimeInit(Task task, Map<String, Object> paramMap, Meter meter, String taskType) throws UDISTaskExecutorException;

    /**
     * 判断定抄任务开始时间是否已经采集到最新点
     * @param collMeterTaskPlan
     * @param paramMap
     * @return
     */
    Boolean isLatestCollectComplete(CollMeterTaskPlan collMeterTaskPlan, Map<String, Object> paramMap);
}
